/*
 * lea_types.h
 *
 *  Created on: Feb 7, 2014
 *      Author: jiang
 */

#ifndef LEA_TYPES_H_
#define LEA_TYPES_H_
#include<stdint.h>
#include<list>
#include<vector>
#include "bntseq.h"
struct SplitPattern{
	int max_split_distance;
	int max_split_num;
	int user_split_distance;
	int user_split_num;
	SplitPattern(){
		max_split_num = 2;
		max_split_distance = 1; //FIXME current design, do not change it. 2014-2-10
	}
};
typedef SplitPattern SplitPattern;

typedef struct{
	uint32_t distinct_level;
	uint32_t kmer_len;
	SplitPattern split_pattern;
	bool index_reverse_complement;
}IndexParam;

struct Options{
	IndexParam  index_parameter;
	int alphabet_len;
	uint64_t kmer_table_len;
	Options()
	{
		alphabet_len = 4;
	}
};	//type for option
typedef Options Options;

typedef struct{
	uint8_t *pac;
	bntseq_t *bns;
	int64_t l_pac;
	bool contain_reverse_complement;
}ReferenceInfo;


//Types for array based table
//
typedef struct{
	uint32_t kmer;
	uint8_t  split_pattern_mapped_int;
}Key;
typedef uint32_t Position;
typedef struct Positions{
	 uint16_t position_num;
	 std::list<Position> positions;
	 Positions(){
		 position_num = 0;
	 }
};
typedef Positions Positions;
typedef Positions TableCellTypeSplitSeed;
/////


typedef	std::vector<uint32_t> Combination;


typedef std::vector<Combination>  CombinationList;


typedef uint32_t TableCellTypeOther;



#endif /* LEA_TYPES_H_ */
